/*web入口文件、*/
let express = require ('express')
let app = express();
// const configs = require('./note/config');
const Util = require('./note/Util');
const db = require('./note/db');

let path = require('path');
var session = require('express-session');
var FileStore = require('session-file-store')(session);
var flash = require('connect-flash');
var identityKey = 'skey';
var bodyParser = require('body-parser');


var login = require('./routers/login');
var register = require('./routers/register');
var add = require('./routers/add');
var note = require('./routers/note');
var logout = require('./routers/logout');
var add = require('./routers/add');
var me = require('./routers/me');

app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());




app.use(flash());
app.use(session({
    name: identityKey,
    secret: 'chyingp',  // 用来对session id相关的cookie进行签名
    store: new FileStore(),  // 本地存储session（文本文件，也可以选择其他store，比如redis的）
    saveUninitialized: false,  // 是否自动保存未初始化的会话，建议false
    resave: false,  // 是否每次都重新保存会话，建议false
    cookie: {
        maxAge: 24 * 60 * 60 * 1000  // 有效期，单位是毫秒 这里设置的是一天
    }
}));

app.use(express.static('public'));
app.set('views',path.join(__dirname , 'views') );
app.engine('.html', require('ejs').__express);
app.set('view engine', 'html');
/*登录状态判断*/
app.use(function (req, res, next) {
  console.log(req.method);
  if (req.session.loginUser) {  // 判断用户是否登录
    next();
  } else {
    // 解析用户请求的路径
    var arr = req.url.split('/');
    // 去除 GET 请求路径上携带的参数
    for (var i = 0, length = arr.length; i < length; i++) {
      arr[i] = arr[i].split('?')[0];
    }
    // 判断请求路径是否为根、登录、注册、登出，如果是不做拦截
    console.log('参数长度'+arr.length+'内容为：'+JSON.stringify(arr));
    if (arr.length > 1 && arr[1] == ''&& req.method== "GET") {
      req.session.originalUrl = req.originalUrl ? req.originalUrl : null;  // 记录用户原始请求路径
      req.flash('error', '请先登录');
      res.redirect('/login');  // 将用户重定向到登录页面
    } else if (arr.length > 1   && (arr[1] == 'register' || arr[1] == 'login' || arr[1] == 'logout' || arr[1] == 'denglu') ) {
      next();
    } else {  // 登录拦截
      req.session.originalUrl = req.originalUrl ? req.originalUrl : null;  // 记录用户原始请求路径
      req.flash('error', '请先登录');
      res.redirect('/login');  // 将用户重定向到登录页面
    }
  }
});

// 路由表
app.use('/login', login);
app.use('/note', note);
app.use('/register',register);
app.use('/logout',logout);
app.use('/add',add);
app.use('/me',me);

app.get('/', function (req, res) {
  var uid = req.session.loginUserId;
  var usernick = req.session.loginUserNick;
  if(!uid){
    return res.redirect('/logout');
  }
  try {
    db.notes.findAll({
      where:{
        uid:uid,
        status:0,
      },
      limit: 10 ,
      order:[['id','DESC']],
    }).then(ret=>{
      if(ret&&ret.length>0){
        res.render('index', { title: usernick+'的笔记', data:{msg:'success',code:520,datas:ret},util:Util});
      }else{
        res.render('index', { title: usernick+'的笔记', data:{msg:'暂无笔记，快新建一个吧!',code:110,datas:ret},util:Util});
      }

    })
    // db.query('SELECT * from `notes` WHERE uid = '+uid+' AND status = 0 order by id DESC',function(err,rows,fileds){
    //   if(rows&&rows.length>0){
    //     res.render('index', { title: usernick+'的笔记', data:{msg:'success',code:520,datas:rows},util:Util});
    //   }else{
    //     res.render('index', { title: usernick+'的笔记', data:{msg:'暂无笔记，快新建一个吧!',code:110,datas:rows},util:Util});
    //   }
    // })
  } catch (e) {
    console.log(e);
  }
});
app.get('/about',function (req,res){
  res.render('about', { title: 'Hey', data:{msg:'hello node!',content:'我只想说一句MMP',uname:'suoge'} });
})
// app.get('/me',function (req,res){
//   res.render('me', { title: 'Hey', data:{msg:'hello node!',content:'我只想说一句MMP',uname:'suoge'} });
// })
// app.get('/login', function (req, res) {
//   if (req.session.loginUser) {  // 判断用户是否登录
//     res.redirect('/');
//     return;
//   }
//  res.render('login', { title: 'Hey', data:{msg:'hello node!',content:'我只想说一句MMP',uname:'suoge'} });
// })
// app.get('/note', function (req, res) {
//    res.render('note', { title: 'Hey', data:{msg:'hello node!',content:'我只想说一句MMP',uname:'suoge'} });
// })
// app.get('/edit', function (req, res) {
//    res.render('edit', { title: 'Hey', data:{msg:'hello node!',content:'我只想说一句MMP',uname:'suoge'} });
// })
// app.get('/add', function (req, res) {
//     res.render('add', { title: 'Hey', data:{msg:'hello node!',content:'我只想说一句MMP',uname:'suoge'} });
// })
// app.get('/register', function (req, res) {
//     res.render('register', { title: 'Hey', data:{msg:'hello node!',content:'我只想说一句MMP',uname:'suoge'} });
// })

// app.post('/denglu', function(req, res, next){
//
//     var sess = req.session;
//     console.log('登录参数为：'+JSON.stringify(req.body));
//     console.log('加密后的密码-',Util.md5(req.body.password));
//     // var user = findUser(req.body.name, req.body.password);
//     db.query("SELECT * from `user` WHERE username ='"+req.body.name+"'",function(err,rows,fields){
//       console.log(err);
//       // console.log(rows);
//       let data = rows;
//       console.log(data);
//       if(rows.length==0){
//         return res.json({ret_code: 1, ret_msg: '账号不存在！'});
//       }else if(data[0].password===Util.md5(req.body.password)){
//           // 密码正确设置session
//               req.session.regenerate(function(err) {
//                   if(err){
//                       return res.json({ret_code: 2, ret_msg: '登录失败'});
//                   }
//
//                   req.session.loginUser = data[0].username;
//                   res.json({ret_code: 0, ret_msg: '登录成功'});
//               });
//
//       }else{
//         // 密码错误
//         res.json({ret_code: 1, ret_msg: '账号或密码错误'});
//       }
//
//     })
//
// });

// app.post('/register',function(req,res,next){
//   let name = req.body.name;
//   let pass = Util.md5(req.body.password);
//   /*还没安全过滤和判断*/
//   console.log('注册参数为：'+JSON.stringify(req.body));
//   db.query('insert into user (username,password) values ("'+name+'","'+pass+'")',function(err,rows,fieds){
//     if (rows) {
//         console.log(rows);
//         return  res.json({ret_code: 0, ret_msg: '注册成功'});
//     }
//     console.log(err);
//     res.json({ret_code: 1, ret_msg: '注册失败'});
//
//   })
// })

// app.get('/logout', function(req, res, next){
//     // 备注：这里用的 session-file-store 在destroy 方法里，并没有销毁cookie
//     // 所以客户端的 cookie 还是存在，导致的问题 --> 退出登陆后，服务端检测到cookie
//     // 然后去查找对应的 session 文件，报错
//     // session-file-store 本身的bug
//
//     req.session.destroy(function(err) {
//         if(err){
//             res.json({ret_code: 2, ret_msg: '退出登录失败'});
//             return;
//         }
//
//         // req.session.loginUser = null;
//         res.clearCookie(identityKey);
//         res.redirect('/login');
//     });
// });


let server = app.listen(8081, function () {

  let host = server.address().address
  let port = server.address().port
  console.log("应用实例，访问地址为 http://%s:%s", host, port);
})
